package common

import (
	"time"
)

const (
	DefaultDateTime = "2006-01-02 15:04:05"
)

/** 时间相关的各式各样特殊值
月份 1,01,Jan,January
日　 2,02,_2
时　 3,03,15,PM,pm,AM,am
分　 4,04
秒　 5,05
年　 06,2006
周几 Mon,Monday
*/

//此方法 必须传入的时间格式与DefaultDateTime的时间格式一模一样 多了少了都会报错
func DataStrParse(dateStr string, location *time.Location, defaultDate string) (res time.Time, err error) {
	defaultDateStr := ""
	if defaultDate == "" {
		defaultDateStr = DefaultDateTime
	} else {
		defaultDateStr = defaultDate
	}

	if location == nil {
		res, err = time.Parse(defaultDateStr, dateStr) //此时间如果用作格式化时间戳则出现比东八区多八小时
	} else {
		res, err = time.ParseInLocation(defaultDateStr, dateStr, location)
	}
	return
}

//将时间字符串转化为时间戳
/***
用法-：
common.DataStrToInt("2020-07-30 15:39:05","") 采用默认的
用法二:
common.DataStrToInt("2020-07-30 15:39","2006-01-02 15:04") 根据自己的需求替换
*/
func DataStrToInt(dateStr string, defaultDate string) (res int64, err error) {
	var cstZone = time.FixedZone("CST", 8*3600) // 设置时区为东八区
	parse, err := DataStrParse(dateStr, cstZone, defaultDate)

	if err == nil {
		res = parse.In(cstZone).Unix()
	}
	return
}

//获取当前时间戳
func Time() int64 {
	return time.Now().Unix()
}

//将时间戳转化为时间

/***
用法-：
common.TimeToDateStr(1596097209,"2006年01月02日 15时04分05秒") 根据自己的需求替换
用法二:
common.TimeToDateStr(1596097209,"") 采用默认的
*/

func TimeToDateStr(timeInt int64, defaultDate string) (res string) {
	defaultDateStr := ""
	if defaultDate == "" {
		defaultDateStr = DefaultDateTime
	} else {
		defaultDateStr = defaultDate
	}
	res = time.Unix(timeInt, 0).Format(defaultDateStr)
	return
}
